using System.Data.Entity.ModelConfiguration;
using InseSoft.Models.Entities;

namespace InseSoft.Models.Mapping
{
    public class SolicitudCotizacionMap : EntityTypeConfiguration<SolicitudCotizacion>
    {
        public SolicitudCotizacionMap()
        {
            // Primary Key
            HasKey(t => t.Id);

            // Properties
            Property(t => t.Producto)
                .HasMaxLength(100);

            Property(t => t.Cantidades)
                .HasMaxLength(100);

            Property(t => t.Observaciones)
                .HasMaxLength(500);

            // Table & Column Mappings
            ToTable("SolicitudCotizacion");
            Property(t => t.Id).HasColumnName("Id");
            Property(t => t.EmpresaId).HasColumnName("EmpresaId");
            Property(t => t.ClienteId).HasColumnName("ClienteId");
            Property(t => t.UsuarioId).HasColumnName("UsuarioId");
            Property(t => t.VendedorId).HasColumnName("VendedorId");
            Property(t => t.MaterialId).HasColumnName("MaterialId");
            Property(t => t.LineaId).HasColumnName("LineaId");
            Property(t => t.Fecha).HasColumnName("Fecha");
            Property(t => t.TipoProductoId).HasColumnName("TipoProductoId");
            Property(t => t.Producto).HasColumnName("Producto");
            Property(t => t.ProductoBase).HasColumnName("ProductoBase");
            Property(t => t.ProductoAltura).HasColumnName("ProductoAltura");
            Property(t => t.ProductoFondo).HasColumnName("ProductoFondo");
            Property(t => t.MaterialBase).HasColumnName("MaterialBase");
            Property(t => t.MaterialAltura).HasColumnName("MaterialAltura");
            Property(t => t.MaterialFondo).HasColumnName("MaterialFondo");
            Property(t => t.Tintas1Cara).HasColumnName("Tintas1Cara");
            Property(t => t.Tintas2Cara).HasColumnName("Tintas2Cara");
            Property(t => t.Cuatricromia).HasColumnName("Cuatricromia");
            Property(t => t.Troquel).HasColumnName("Troquel");
            Property(t => t.Cantidades).HasColumnName("Cantidades");
            Property(t => t.Observaciones).HasColumnName("Observaciones");
            Property(t => t.Rendimiento).HasColumnName("Rendimiento");
            Property(t => t.Montaje).HasColumnName("Montaje");
            Property(t => t.Cubrimiento).HasColumnName("Cubrimiento");
            Property(t => t.CotizacionId).HasColumnName("CotizacionId");
            Property(t => t.Aplicada).HasColumnName("Aplicada");
            Property(t => t.Despiece).HasColumnName("Despiece");

            // Relationships
            HasOptional(t => t.Cliente)
                .WithMany(t => t.SolicitudCotizaciones)
                .HasForeignKey(d => d.ClienteId);
            HasRequired(t => t.Empresa)
                .WithMany(t => t.SolicitudCotizacions)
                .HasForeignKey(d => d.EmpresaId);
            HasOptional(t => t.Linea)
                .WithMany(t => t.SolicitudCotizaciones)
                .HasForeignKey(d => d.LineaId);
            HasOptional(t => t.Material)
                .WithMany(t => t.SolicitudCotizaciones)
                .HasForeignKey(d => d.MaterialId);
            HasOptional(t => t.TipoProducto)
                .WithMany(t => t.SolicitudCotizaciones)
                .HasForeignKey(d => d.TipoProductoId);
            HasOptional(t => t.Usuario)
                .WithMany(t => t.SolicitudCotizaciones)
                .HasForeignKey(d => d.UsuarioId);
            HasOptional(t => t.Vendedor)
                .WithMany(t => t.SolicitudCotizaciones)
                .HasForeignKey(d => d.VendedorId);

        }
    }
}
